package org.example.entity;

import java.time.LocalDateTime;

/**
 * 访问统计实体类
 * 对应数据库中的access_statistics表
 * 记录每次访问短链接的详细信息
 * 
 * @author Your Name
 * @since 2024-07-01
 */
public class AccessStatistics {
    
    /**
     * 主键ID，数据库自增
     */
    private Long id;
    
    /**
     * 短链接编码，关联到short_url表
     * 例如：abc12345
     */
    private String shortCode;
    
    /**
     * 访问时间，记录用户访问的具体时间
     * 用于统计分析和数据清理
     */
    private LocalDateTime accessTime;
    
    /**
     * 访问者IP地址，记录访问者的网络地址
     * 用于地理位置分析和防刷机制
     */
    private String ipAddress;
    
    /**
     * 用户代理，记录访问者的浏览器和设备信息
     * 例如：Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
     */
    private String userAgent;
    
    /**
     * 来源页面，记录用户从哪个页面点击的短链接
     * 可以为null，用于分析用户行为
     */
    private String referer;
    
    /**
     * 无参构造函数
     * 用于MyBatis等框架创建对象
     */
    public AccessStatistics() {}
    
    /**
     * 带参构造函数
     * 用于快速创建访问统计记录
     * 
     * @param shortCode 短链接编码
     * @param ipAddress 访问者IP地址
     * @param userAgent 用户代理
     * @param referer 来源页面
     */
    public AccessStatistics(String shortCode, String ipAddress, String userAgent, String referer) {
        // 设置短链接编码
        this.shortCode = shortCode;
        // 设置访问者IP地址
        this.ipAddress = ipAddress;
        // 设置用户代理
        this.userAgent = userAgent;
        // 设置来源页面
        this.referer = referer;
        // 设置访问时间为当前时间
        this.accessTime = LocalDateTime.now();
    }
    
    // ==================== Getter和Setter方法 ====================
    
    /**
     * 获取主键ID
     * @return 主键ID
     */
    public Long getId() {
        return id;
    }
    
    /**
     * 设置主键ID
     * @param id 主键ID
     */
    public void setId(Long id) {
        this.id = id;
    }
    
    /**
     * 获取短链接编码
     * @return 短链接编码
     */
    public String getShortCode() {
        return shortCode;
    }
    
    /**
     * 设置短链接编码
     * @param shortCode 短链接编码
     */
    public void setShortCode(String shortCode) {
        this.shortCode = shortCode;
    }
    
    /**
     * 获取访问时间
     * @return 访问时间
     */
    public LocalDateTime getAccessTime() {
        return accessTime;
    }
    
    /**
     * 设置访问时间
     * @param accessTime 访问时间
     */
    public void setAccessTime(LocalDateTime accessTime) {
        this.accessTime = accessTime;
    }
    
    /**
     * 获取访问者IP地址
     * @return 访问者IP地址
     */
    public String getIpAddress() {
        return ipAddress;
    }
    
    /**
     * 设置访问者IP地址
     * @param ipAddress 访问者IP地址
     */
    public void setIpAddress(String ipAddress) {
        this.ipAddress = ipAddress;
    }
    
    /**
     * 获取用户代理
     * @return 用户代理
     */
    public String getUserAgent() {
        return userAgent;
    }
    
    /**
     * 设置用户代理
     * @param userAgent 用户代理
     */
    public void setUserAgent(String userAgent) {
        this.userAgent = userAgent;
    }
    
    /**
     * 获取来源页面
     * @return 来源页面
     */
    public String getReferer() {
        return referer;
    }
    
    /**
     * 设置来源页面
     * @param referer 来源页面
     */
    public void setReferer(String referer) {
        this.referer = referer;
    }
}
